﻿#include "cmodbusunitregister.h"

CModbusUnitRegister::CModbusUnitRegister(ESigType maptype, QObject *parent)
    : CModbusUnitBase(2,maptype,parent)
{
    QMap<int, QString> vmap;
    vmap.insert(3, "输入寄存器");
    vmap.insert(4, "保持寄存器");
    m_fieldValueMap.insert("寄存器类型", vmap);
}

QString CModbusUnitRegister::getFieldNameByCol(int col) {
    if(col < EInvalid)
        return CModbusUnitBase::getFieldNameByCol(col);

    if(5 == col) {
        return "数据长度";
    } else if(6 == col) {
        return "数据类型";
    }
    return "";
}

QVariant CModbusUnitRegister::getFieldValueByFielddName(const QString &name) {
    if("数据长度" == name) {
        return datalen;
    } else if("数据类型" == name) {
        return datatype;
    } else {
        return CModbusUnitBase::getFieldValueByFielddName(name);
    }
}

void CModbusUnitRegister::setFieldValueByCol(int col, const QVariant &value)
{
    if(5 == col) {
        datalen = value.toInt();
        changeBgColor(true);
    } else if(6 == col) {
        datatype = value.toInt();
        changeBgColor(true);
    } else {
        CModbusUnitBase::setFieldValueByCol(col, value);
    }
}

QJsonObject CModbusUnitRegister::toJson()
{
    QJsonObject obj = CModbusUnitBase::toJson();
    obj["datalen"] = datalen;
    obj["datatype"] = datatype;
    return obj;
}

void CModbusUnitRegister::fromJson(const QJsonObject &obj)
{
    CModbusUnitBase::fromJson(obj);
    datalen = obj["datalen"].toInt();
    datatype = obj["datatype"].toInt();
    if(!is_init)
        deleteReset();
}

QSharedPointer<IModel> CModbusUnitRegister::createEmpty()
{

}

void CModbusUnitRegister::changeBgColor(bool ischange) {
    if(!ischange) {
        m_backgroundField.clear();
        m_ischange = false;
    } else {
        m_backgroundField.insert("数据长度", "#FFA49F");
        m_backgroundField.insert("数据类型", "#FFA49F");
        m_ischange = true;
    }
    CModbusUnitBase::changeBgColor(ischange);
}

bool CModbusUnitRegister::checkData() {
    return CModbusUnitBase::checkData();
}

void CModbusUnitRegister::deleteReset() {
    changeBgColor(false);
    datalen = -1;
    datatype = 0;
    reg_type = 3;
    CModbusUnitBase::deleteReset();
    m_backgroundField.insert("数据长度", "#6B6B6B");
    m_backgroundField.insert("数据类型", "#6B6B6B");
}
